//package com.huawei.aw;
//
//import com.alibaba.fastjson.JSON ;
////import com.huawei.hutaf.apitest.aw.* ;
//
//import java.sql.*;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
///**
// * @Description 导入指定数据到指定表
// */
//public class InsertDataToDatabase {
//
//    /**
//     * @Description 插入指定数据到指定数据库的指定表
//     * @param url 数据库链接
//     * @param us 数据库账号
//     * @param ps 数据库密码
//     * @param tableName 表名
//     * @param columnParams 字段列表
//     * @param dataParams 待插入数据
//     * @return
//     * */
//    public static int[] insertToDatabase(String url, String us, String ps, String tableName, String columnParams, String dataParams){
//        int[] results = null;
////        try {
//        /*
//         * 1.根据env、module获取数据库连接
//         * */
//        Connection conn = null;
//        try {
//            conn = DriverManager.getConnection(url, us, ps);
//        } catch (SQLException ex) {
//            throw new RuntimeException(ex);
//        }
////        Connection conn = JdbcUtilPerf.getConnection(url, us, ps);
//        /*
//         * 2.根据tableName获取表全部的“字段名-字段类型”数据，组成map集合
//         * */
//        DatabaseMetaData metaData = null;
//        try {
//            metaData = conn.getMetaData();
//        } catch (SQLException e) {
//            // Reporter.log("1/数据库连接不可用#" + e.getMessage(), true);
//            e.printStackTrace();
//        } catch (UnsupportedOperationException e){
//            // Reporter.log("1/数据库不支持元数据操作#" + e.getMessage(), true);
//            e.printStackTrace();
//        }
//        //获取表的字段信息
//        ResultSet resultSet = null;
//        try {
//            resultSet = metaData.getColumns(null, null, tableName, null);
//        } catch (SQLException e) {
//            // Reporter.log("1#获取表字段信息失败#" + e.getMessage(), true);
//            e.printStackTrace();
//        }
//        //存储字段类型到ArrayList
//        ArrayList<Map<String, String>> columnTypeMapList = new ArrayList<Map<String, String>>();
//        //遍历结果集
//        try {
//            while(resultSet.next()){
//                String columnName = null;
//                String columnType = null;
//                try {
//                    columnName = resultSet.getString("COLUMN_NAME").toLowerCase();
//                    columnType = resultSet.getString("TYPE_NAME");
//                } catch (SQLException e) {
//                    // Reporter.log("1#获取字段-类型列表失败#" + e.getMessage(), true);
//                    e.printStackTrace();
//                }
//
//                //创建字段类型的Map
//                Map<String, String> filedType = new HashMap<String, String>();
//                filedType.put(columnName, columnType);
//                //将字段类型的Map添加到ArrayList
//                columnTypeMapList.add(filedType);
//            }
//        } catch (SQLException e) {
//            // Reporter.log("1#遍历获取字段-类型列表失败#" + e.getMessage(), true);
//            e.printStackTrace();
//        }
//        // Reporter.log("1#全表字段-类型列表#" + columnTypeMapList, true);
//        //打印字段类型
//        //for (Map<String, String> columnType : columnTypeMapList) {
//        //	for (Map.Entry<String, String> entry : columnType.entrySet()) {
//        //		System.out.println("Column:" + entry.getKey() + ",Type:" + entry.getValue());
//        //	}
//        //	System.out.println(columnTypeMapList);
//
//
//        /*
//         3. 根据columnParams获取表-指定“的”字段名-字段类型“数据，组成新的-字段名-字段类型”map集合
//         */
//        //去除columnParams的全部tab、换行、空格
//        String columnParamsSub = columnParams.trim().replaceAll("\t", "").replaceAll("\n", "");
//        //去除columnParams的前后中括号[]
//        String coluParaSub = columnParamsSub.substring(1, columnParamsSub.length() - 1);
//        //把字符串columnParams转换为数组
//        String[] columnArray = coluParaSub.toLowerCase().split(",");
//        //把数组转换为list
//        List<String> columnList = Arrays.asList(columnArray);
//        // Reporter.log("1#字段列表#" + columnList, true);
//
//        //遍历原始的ArrayList<Map<String, String>>
//        ArrayList<Map<String, String>> newColumnTypeMapList = new ArrayList<>();
//        for (Map<String, String> columnTypeMap : columnTypeMapList) {
//            // 判断是否含有List<String>键
//            for (String column : columnList) {
//                if (columnTypeMap.containsKey(column.trim())) {
//                    // 如果有，则将该Map加入到新的ArrayList<Map<String, String>>中
//                    newColumnTypeMapList.add(columnTypeMap);
//                }
//            }
//        }
//
//    }
//    // 输出新的ArrayList<Map<String,String>>中的数据
//    //        for (Map<String,String> map : newColumnTypeMapList) {
//    //            // Reporter.log("1#字段map:#" + map, true);
//    //        }
//
//    columnTypeMapList = newColumnTypeMapList;
//    // Reporter.log("1#字段-类型列表#" + columnTypeMapList, true);
//
//    /*
//     4. for循环“字段名”数组，拼接SQL
//     */
//    String sql = "INSERT INTO " + tableName + "(" + String.join(",", columnArray) + ")VALUES(";
//            for (int i=0;i<columnArray.length;i++){
//        sql += "?";
//        if(i<columnArray.length - 1){
//            sql += ",";
//        }
//    }
//    sql += ")";
//
//    /*
//     5. 预编译SQL
//     */
//    // Reporter.log("1#预编译SQL#" + sql, true);
//    PreparedStatement pstmt = null;
//            try {
//        pstmt = conn.prepareStatement(sql);
//    } catch (SQLException e) {
//        // Reporter.log("1#预编译失败#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//
//            /*
//             6. 读入参数据，根据数据类型，把入参传给预编译pstmt
//             */
//
//    //转换入参字符串dataParams为数组
//    String[][] rowDataArrays = JSON.parseObject(dataParams, String[][].class);
//
//    //待插入数据条数
//    int rowNum = rowDataArrays.length;
//    // Reporter.log("1#待插入数据#" + rowNum + "条", true);
//    //字段数
//    int columnNum = columnList.size();
//    // Reporter.log("1#每条数据#" + columnNum + "个字段值", true);
//
//    //打印数组
//    // Reporter.log("1#待插入数据:#" + Arrays.deepToString(rowDataArrays), true);
//
//    //用了一个二维数组来存储要插入的数据，然后使用循环为每个占位符设置具体的值。
//    //使用addBatch()方法将所有的插入语句添加到批处理中，然后使用executeBatch()方法一次性执行所有的插入操作
//    //循环数据行
//        for (int i = 0; i < rowNum; i++) {
//        //// Reporter.log("1#开始循环第" + (i + 1) + "条数据", true);
//        String[] rowDataArr = rowDataArrays[i];
//        int size = rowDataArr.length;
//        //获取到的行数据字段值个数
//
//        //开始循行字段值（列）
//        for (int j = 0; j < columnNum; j++) {
//            //字段个数要与每组插入数据个数一致
//            if ((size != 0) && (size == columnNum)) {
//                //获取本次循环对应字段名
//                String columnKey = columnList.get(j);
//                //根据字段索引、字段名、字段类型
//                //System.out.println(j+1);
//                String columnType = columnTypeMapList.get(j).get(columnKey);
//                //// Reporter.log("1#字段-类型#" + columnKey + " -- " + columnType, true);
//                //System.out.println("1# 字段-类型#" + columnKey + " -- " + columnType);
//
//                //获取当前次循环对应的字段值
//                String columnValue = rowDataArr[j];
//                //System.out.println("1# 字段-数据#" + columnKey + " -- " + columnValue);
//                //// Reporter.log("1#字段-数据#" + columnKey + " -- " + columnValue, true);
//
//                //转换字段值类型
//                if ("smallint".equals(columnType)
//                        || "integer".equals(columnType)
//                        || "bigint".equals(columnType)
//                        || "int4".equals(columnType)
//                        || "int8".equals(columnType)) {
//                    Integer coluValue = "".equals(columnValue) ? null : Integer.valueOf(columnValue);
//                    try {
//                        pstmt.setInt(j + 1, coluValue);
//                    } catch (SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入int数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                } else if ("numeric".equals(columnType)) {
//                    Double coluValue = "".equals(columnValue) ? null : Double.valueOf(columnValue);
//                    try {
//                        pstmt.setDouble(j + 1, coluValue);
//                    } catch (SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入double数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                } else if ("decimal".equals(columnType)) {
//                    BigDecimal coluValue = "".equals(columnValue) ? null : new BigDecimal(columnValue);
//                    try {
//                        pstmt.setBigDecimal(j + 1, coluValue);
//                    } catch (SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入decimal数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                } else if ("bool".equals(columnType)) {
//                    Boolean coluValue = "".equals(columnValue) ? null : Boolean.valueOf(columnValue);
//                    try {
//                        pstmt.setBoolean(j + 1, coluValue);
//                    } catch (SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入boolean数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                } else if ("date".equals(columnType) || "timestamp".equals(columnType)) {
//                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                    Date coluValue = null;
//                    try {
//                        coluValue = "".equals(columnValue) ? null : sdf.parse(columnValue);
//                        pstmt.setDate(j + 1, new java.sql.Date(coluValue.getTime()));
//                    } catch (ParseException | SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入date数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                } else {
//                    try {
//                        pstmt.setString(j + 1, columnValue);
//                    } catch (SQLException e) {
//                        // Reporter.log("1#" + columnKey + "传入string数据" + columnValue + "失败#" + e.getMessage(), true);
//                        e.printStackTrace();
//                    }
//                }
//            }
//            //添加到批处理
//            try {
//                pstmt.addBatch();
//            } catch (SQLException e) {
//                // Reporter.log("1#数据添加到批处理失败#" + e.getMessage(), true);
//                e.printStackTrace();
//            }
//        }
//
////执行批处理
//        try {
//            results = pstmt.executeBatch();
//            // Reporter.log("1#执行批处理结果#" + Arrays.toString(results), true);
//        } catch (SQLException e) {
//            // Reporter.log("1#执行批处理失败#" + e.getMessage(), true);
//            e.printStackTrace();
//        }
//
////关闭资源
//        if (pstmt != null) {
//            try {
//                pstmt.close();
//            } catch (SQLException e) {
//                // Reporter.log("1#关闭PreparedStatement失败#" + e.getMessage(), true);
//                e.printStackTrace();
//            }
//        }
//        if (conn != null) {
//            try {
//                conn.close();
//            } catch (SQLException e) {
//                // Reporter.log("1#关闭Connection失败#" + e.getMessage(), true);
//                e.printStackTrace();
//            }
//        }
//
//        return results;
//
//        ----------------------------------------------------------------------------------------------------------
//
//                pstmt.setObject(j + 1, coluValue);
//    } catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入numeric数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//} else if ("varchar".equals(columnType) || "char".equals(columnType)) {
//String coluValue = "".equals(columnValue) ? null : String.valueOf(columnValue);
//                try {
//                        pstmt.setString(j + 1, coluValue);
//                } catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入String数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//                }
//                        } else if ("timestamp".equals(columnType) || "timestamptz".equals(columnType)) {
//String coluValue = "".equals(columnValue) ? null : String.valueOf(columnValue);
//SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Timestamp timestamp = null;
//                if (coluValue != null && coluValue.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) {
//        try {
//java.util.Date columDate = dateFormat.parse(coluValue);
//timestamp = new Timestamp(columDate.getTime());
//        pstmt.setTimestamp(j + 1, timestamp);
//                    } catch (ParseException e) {
//        // Reporter.log("1#" + columnKey + "传入timestamp数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//                    } catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入timestamp数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//                    }
//                            } else {
//                            try {
//                            pstmt.setNull(j + 1, Types.TIMESTAMP);
//                    } catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入timestamp数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//                    }
//                            }
//                            } else {
//                            try {
//                            pstmt.setObject(j + 1, columnValue);
//                } catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//                }
//                        }
//                        }
//                        }
//                        // 添加到批处理
//                        try {
//                        pstmt.addBatch();
//    } catch (SQLException e) {
//        // Reporter.log("1#数据添加到批处理失败#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//            }
//
//// 执行批处理
//            try {
//results = pstmt.executeBatch();
//// Reporter.log("1#执行批处理结果#" + Arrays.toString(results), true);
//        } catch (SQLException e) {
//        // Reporter.log("1#执行批处理失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//
//// 关闭资源
//        if (pstmt != null) {
//        try {
//        pstmt.close();
//    } catch (SQLException e) {
//        // Reporter.log("1#关闭PreparedStatement失败#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//            }
//            if (conn != null) {
//        try {
//        conn.close();
//    } catch (SQLException e) {
//        // Reporter.log("1#关闭Connection失败#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//            }
//
//            return results;
//
//----------------------------------------------------------------------------------------------------------
//
//columnDate = dateFormat.parse(coluValue);
//    } catch (ParseException e) {
//        // Reporter.log("1#" + columnKey + "传入Timestamp数据" + columnValue + "失败#" + "日期格式解析异常！" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//timestamp = new Timestamp(columnDate.getTime());
//        } else {
//        if (coluValue != null && coluValue.matches("\\d+\\.\\d+")) {
//double doubleDate = Double.parseDouble(coluValue);
//long longDate = (long) ((doubleDate - 25569) * 86400 * 1000);
//java.util.Date date = new java.util.Date(longDate);
//timestamp = new Timestamp(date.getTime());
//        }
//        }
//        try {
//        pstmt.setTimestamp(j + 1, timestamp);
//} catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入String数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//
//        } else if ("bytea".equals(columnType)) {
//String coluValue = "".equals(columnValue) ? null : String.valueOf(columnValue);
//pstmt.setBytes(j + 1, coluValue.getBytes());
//        } else if ("interval".equals(columnType)) {
//Integer coluValue = "".equals(columnValue) ? null : Integer.valueOf(columnValue);
//try {
//        pstmt.setObject(j + 1, coluValue);
//} catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入interval数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//        } else {
//        try {
//        pstmt.setObject(j + 1, columnValue);
//} catch (SQLException e) {
//        // Reporter.log("1#" + columnKey + "传入数据" + columnValue + "失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//        }
//        }
////添加到批处理
//        try {
//        pstmt.addBatch();
//} catch (SQLException e) {
//        // Reporter.log("1#数据添加到批处理失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//        }
//
////执行批处理
//        try {
//results = pstmt.executeBatch();
//// Reporter.log("1#执行批处理结果#" + Arrays.toString(results), true);
//        } catch (SQLException e) {
//        // Reporter.log("1#执行批处理失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//
////关闭资源
//        if (pstmt != null) {
//        try {
//        pstmt.close();
//} catch (SQLException e) {
//        // Reporter.log("1#关闭PreparedStatement失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//        }
//        if (conn != null) {
//        try {
//        conn.close();
//} catch (SQLException e) {
//        // Reporter.log("1#关闭Connection失败#" + e.getMessage(), true);
//        e.printStackTrace();
//}
//        }
//
//        return results;
//}
//
//        ----------------------------------------------------------------------------------------------------------
//
//        Integer.valueOf(columnValue);
////            pstmt.setObject(j + 1, coluValue);
//        } else {
//String coluValue = null;
//            try {
//                    pstmt.setObject(j + 1, coluValue);
//            } catch (SQLException e) {
//        e.printStackTrace();
//            }
//                    }
//                    } else {
//                    // Reporter.log("1#错误#" +
//                    "入参数据与字段列表未对齐，请检查！", true);
//                    }
//                    //pstmt.executeUpdate();
//                    try {
//                    pstmt.addBatch();//添加到批处理
//    } catch (SQLException e) {
//        // Reporter.log("1#添加批处理失败！#" + e.getMessage(), true);
//        e.printStackTrace();
//    }
//            }
//
///*
//7.批量执行
//*/
//            try {
//results = pstmt.executeBatch();
//} catch (SQLException e) {
//        // Reporter.log("1#批量执行失败#" + e.getMessage(), true);
//        //MeaSpwAwPerf.printException("错误日志", e);
//        e.printStackTrace();
//}
//        try {
//        pstmt.close();
//} catch (SQLException e) {
//        e.printStackTrace();
//}
//
//        ----------------------------------------------------------------------------------------------------------
//
//        } catch (SQLException e) {
//        // Reporter.log("1#pstmt关闭失败#" + e.getMessage(), true);
//        e.printStackTrace();
//            }
//                    try {
//                    conn.close();
//            } catch (SQLException e) {
//        // Reporter.log("1#conn关闭失败#" + e.getMessage(), true);
//        e.printStackTrace();
//            }
////            } catch (SQLException e) {
////                // Reporter.log("1#数据插入失败！#", true);
////                e.printStackTrace();
////            }
//// Reporter.log("1#插入数据结果集#" + Arrays.toString(results), true);
//int sum = 0;
//            for (int i : results) {
//sum += i;
//            }
//                    // Reporter.log("1#共插入数据#" + sum + "条", true);
//                    return results;
//        }
//                }
